// 定义一个函数，输入一个链表的头节点，反转该链表并输出反转后链表的头节点。

//  

// 示例:

// 输入: 1->2->3->4->5->NULL
// 输出: 5->4->3->2->1->NULL

// 来源：力扣（LeetCode）
// 链接：https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof
// 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。

#include<bits/stdc++.h>
using namespace std;

// 遍历获得节点数，并保存节点val
// 二次倒序遍历val，更改节点值

// 执行用时：
// 4 ms
// , 在所有 C++ 提交中击败了
// 91.91%
// 的用户
// 内存消耗：
// 8.2 MB
// , 在所有 C++ 提交中击败了
// 25.19%
// 的用户



  struct ListNode {
      int val;
      ListNode *next;
      ListNode(int x) : val(x), next(NULL) {}
  };
 
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode* cur = head;
        vector<int> temp;
        while(cur!=nullptr){
            temp.emplace_back(cur->val);
            cur=cur->next;
        }
        cur = head;
        for(int i=temp.size()-1;i>=0;--i){
            cur->val=temp[i];
            cur=cur->next;
        }
        return head;

    }
};